/*
 * scheduler.c
 *
 *  Created on: Apr 4, 2020
 *      Author: Administrator
 */

#include "scheduler.h"
#include "gpio.h"

typedef struct
{
	unsigned char input;
	unsigned char control;
	unsigned short output;
}
t_sch;

t_sch sch;

void sch_init(void)
{
	sch.input = 0u;
	sch.control = 0u;
	sch.output = 0u;
}

void sch_main(void)
{
	for(;;)
	{
		if( sch.control != sch.input )
		{
			/* sync */
			sch.control = sch.input;

			/* count */
			sch.output++;

#if 1
			if( sch.output & 0x020u ) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
			if( sch.output & 0x040u ) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
			if( sch.output & 0x080u ) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
			if( sch.output & 0x100u ) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
			if( sch.output & 0x200u ) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
			if( sch.output & 0x400u ) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
#else
			if( sch.output & 0x008u ) LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0); else LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_0);
			if( sch.output & 0x010u ) LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_1); else LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_1);
			if( sch.output & 0x020u ) LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2); else LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_2);
			if( sch.output & 0x040u ) LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_3); else LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_3);
			if( sch.output & 0x080u ) LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_4); else LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_4);
			if( sch.output & 0x100u ) LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_5); else LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5);
#endif
		}
		else
		{
			/* idle */
		}
	}
}

void sch_eventTickUp1ms(void)
{
	sch.input++;
}
